
Sora Fujimoto
AI Solutions Architect

Webオートメーションには、強力で使いやすいツールが必要です。しかし、現代のウェブサイトでは、自動化スクリプトを停止するような高度なアンチボット対策やCAPTCHAが導入されています。
HeliumとCapSolverの組み合わせは、エレガントな解決策を提供します。
これらのツールを組み合わせることで、CAPTCHAチャレンジを自動的に処理するスムーズなWebオートメーションが可能になります。
このガイドでは、以下の3つのコアゴールを達成するお手伝いをします。
Heliumは、Seleniumをより使いやすくするPythonライブラリです。シンプルで英語のような構文でブラウザオートメーションを記述できる高レベルなAPIを提供します。
click("Submit")を書くwrite("Hello", into="Search")# Heliumをインストール
pip install helium
# CapSolver API用のrequestsライブラリをインストール
pip install requests
from helium import *
# ブラウザを起動し、移動
start_chrome("https://wikipedia.org")
# 検索ボックスにタイプ
write("Python programming", into=S("input[name='search']"))
# 検索ボタンをクリック
click(Button("Search"))
# テキストが存在するか確認
if Text("Python").exists():
print("Pythonの記事が見つかりました!")
# ブラウザを終了
kill_browser()
CapSolverは、幅広い種類のCAPTCHAに対応したAIを駆使した自動CAPTCHA解決サービスです。数秒でCAPTCHAチャレンジを送信し、解決結果を受け取るシンプルなAPIを提供します。
ボーナス: 登録時にコード
HELIUMを使用するとボーナスクレジットがもらえます!
https://api.capsolver.comhttps://api-stable.capsolver.comHeliumとCapSolverを組み合わせる前に、Webオートメーションには以下の課題がありました:
| 課題 | 影響 |
|---|---|
| CAPTCHAチャレンジ | 手動で解決する必要があり、オートメーションを妨げる |
| 複雑なセレクタ | Seleniumでは冗長なXPath/CSSセレクタが必要 |
| タイミングの問題 | 要素がアクセス時に準備できていない |
| コードの可読性 | オートメーションスクリプトが保守しにくくなる |
Helium + CapSolverの統合により、クリーンで読みやすいコードでこれらの課題を解決します。
API統合アプローチでは、CAPTCHA解決プロセスの完全な制御が可能で、あらゆる種類のCAPTCHAに対応します。
pip install helium requests
import time
import requests
from helium import *
CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"
def create_task(task_payload: dict) -> str:
"""CAPTCHA解決タスクを作成し、タスクIDを返します。"""
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": task_payload
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"CapSolverエラー: {result.get('errorDescription')}")
return result["taskId"]
def get_task_result(task_id: str, max_attempts: int = 120) -> dict:
"""タスク結果をポーリングして解決またはタイムアウトまで待機します。"""
for _ in range(max_attempts):
response = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
)
result = response.json()
if result.get("status") == "ready":
return result["solution"]
elif result.get("status") == "failed":
raise Exception(f"タスク失敗: {result.get('errorDescription')}")
time.sleep(1)
raise TimeoutError("CAPTCHA解決がタイムアウトしました")
def solve_captcha(task_payload: dict) -> dict:
"""CAPTCHA解決ワークフローを完了します。"""
task_id = create_task(task_payload)
return get_task_result(task_id)
Heliumと組み合わせて、CapSolverのブラウザ拡張機能を使用することもできます。自動的なCAPTCHA検出と解決が可能です。
config.jsファイルにAPIキーを設定します:// 拡張機能フォルダ内で編集: assets/config.js
var defined = {
apiKey: "YOUR_CAPSOLVER_API_KEY", // 実際のAPIキーに置き換えてください
enabledForBlacklistControl: false,
blackUrlList: [],
enabledForRecaptcha: true,
enabledForRecaptchaV3: true,
enabledForTurnstile: true,
// ...その他の設定
}
from helium import *
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_argument('--load-extension=/path/to/capsolver-extension')
start_chrome(options=options)
# 拡張機能が自動的にCAPTCHAを検出および解決します
注意: 拡張機能は、自動的にCAPTCHAを解決する前に有効なAPIキーを設定する必要があります。
この例では、GoogleのデモページでreCAPTCHA v2を自動的にサイトキー検出で解決します:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"
def solve_recaptcha_v2(site_key: str, page_url: str) -> str:
"""reCAPTCHA v2を解決し、トークンを返します。"""
# タスクを作成
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": page_url,
"websiteKey": site_key,
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"エラー: {result.get('errorDescription')}")
task_id = result["taskId"]
print(f"タスクを作成しました: {task_id}")
# 結果をポーリング
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
elif result.get("status") == "failed":
raise Exception(f"失敗: {result.get('errorDescription')}")
print(" 解決を待機中...")
time.sleep(1)
def main():
target_url = "https://www.google.com/recaptcha/api2/demo"
# 逆検出を備えたブラウザを設定
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
print("ブラウザを起動中...")
start_chrome(target_url, options=options)
driver = get_driver()
try:
time.sleep(2)
# ページからサイトキーを自動検出
recaptcha_element = driver.find_element("css selector", ".g-recaptcha")
site_key = recaptcha_element.get_attribute("data-sitekey")
print(f"検出されたサイトキー: {site_key}")
# CAPTCHAを解決
print("\nCapSolverでreCAPTCHA v2を解決中...")
token = solve_recaptcha_v2(site_key, target_url)
print(f"トークンを取得: {token[:50]}...")
# トークンをインジェクト
print("\nトークンをインジェクト中...")
driver.execute_script(f'''
var responseField = document.getElementById('g-recaptcha-response');
responseField.style.display = 'block';
responseField.value = '{token}';
''')
print("トークンをインジェクトしました!")
# Heliumのシンプルな構文でフォームを送信
print("\nフォームを送信中...")
click("Submit")
time.sleep(3)
# 成功を確認
if "Verification Success" in driver.page_source:
print("\n=== 成功! ===")
print("reCAPTCHAが解決され、フォームが送信されました!")
finally:
kill_browser()
if __name__ == "__main__":
main()
自分でテストしてください:
python demo_recaptcha_v2.py
Cloudflare Turnstileは、最も一般的なCAPTCHAチャレンジの一つです。以下はその解決方法です:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"
def solve_turnstile(site_key: str, page_url: str) -> str:
"""Cloudflare Turnstileを解決し、トークンを返します。"""
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": page_url,
"websiteKey": site_key,
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"エラー: {result.get('errorDescription')}")
task_id = result["taskId"]
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
elif result.get("status") == "failed":
raise Exception(f"失敗: {result.get('errorDescription')}")
time.sleep(1)
def main():
target_url = "https://your-target-site.com"
turnstile_site_key = "0x4XXXXXXXXXXXXXXXXX" # ページソース内で確認
# ブラウザを設定
options = ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
start_chrome(target_url, options=options)
driver = get_driver()
try:
# Turnstileが読み込まれるのを待機
time.sleep(3)
# CAPTCHAを解決
print("Turnstileを解決中...")
token = solve_turnstile(turnstile_site_key, target_url)
print(f"トークンを取得: {token[:50]}...")
# トークンをインジェクト
driver.execute_script(f'''
document.querySelector('input[name="cf-turnstile-response"]').value = "{token}";
// コールバックが存在する場合をトリガー
const callback = document.querySelector('[data-callback]');
if (callback) {{
const callbackName = callback.getAttribute('data-callback');
if (window[callbackName]) {{
window[callbackName]('{token}');
}}
}}
''')
# Heliumでフォームを送信
if Button("Submit").exists():
click("Submit")
print("Turnstileをバイパスしました!")
finally:
kill_browser()
if __name__ == "__main__":
main()
reCAPTCHA v3はスコアベースで、ユーザーの操作は必要ありません:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CAPSOLVER_API_KEY = "YOUR_API_KEY"
CAPSOLVER_API = "https://api.capsolver.com"
def solve_recaptcha_v3(
site_key: str,
page_url: str,
action: str = "verify",
min_score: float = 0.7
) -> str:
"""指定されたアクションと最小スコアでreCAPTCHA v3を解決します。"""
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": page_url,
"websiteKey": site_key,
"pageAction": action,
"minScore": min_score
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"エラー: {result.get('errorDescription')}")
task_id = result["taskId"]
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
elif result.get("status") == "failed":
raise Exception(f"失敗: {result.get('errorDescription')}")
time.sleep(1)
def main():
target_url = "https://your-target-site.com"
recaptcha_v3_key = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"
# v3用のヘッドレスブラウザを設定
options = ChromeOptions()
options.add_argument('--headless')
start_chrome(target_url, options=options)
driver = get_driver()
try:
# "login"アクションでreCAPTCHA v3を解決
print("reCAPTCHA v3を解決中...")
token = solve_recaptcha_v3(
recaptcha_v3_key,
target_url,
action="login",
min_score=0.9
)
# トークンをインジェクト
driver.execute_script(f'''
var responseField = document.querySelector('[name="g-recaptcha-response"]');
if (responseField) {{
スケーラブルなRustウェブスクレイピングアーキテクチャを学びましょう。リクエスト、スクレイパー、非同期スクレイピング、ヘッドレスブラウザスクレイピング、プロキシローテーション、およびコンプライアンス対応のCAPTCHA処理で。

2026年のデータ・アズ・ア・サービス(DaaS)を理解する。その利点、ユースケース、およびリアルタイムの洞察と拡張性を通じて企業を変革する方法について探る。
